
//83. 删除排序链表中的重复元素
class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        if(head==nullptr)
            return head;
        ListNode* cur = head;
        ListNode* pnode=cur;
        pnode=pnode->next;
        ListNode* next = nullptr;
        while(pnode)
        {
            next = pnode->next;
            if(cur->val == pnode->val)  //需要删除next
            {
                cur->next = next;
            }
            else
            {
                cur = pnode;
            }
            pnode = next;

        }
        return head;
    }
};


//////////////////////////
//剑指 Offer II 003. 前 n 个数字二进制中 1 的个数
class Solution {
public:
    vector<int> countBits(int n) {
        vector<int> v;
        int i=0;
        while(i<=n)
        {
            int count=0;
            int x=i;
            while(x)
            {
                int bit = x&1;
                if(bit)
                {
                    count++; 
                }
                x=x>>1;
            }
            v.push_back(count);
            ++i;
        }
    return v;
    }
};

////////////////////////////////////////////////////////////////////////////
//剑指 Offer II 004. 只出现一次的数字 


class Solution {
public:
    int singleNumber(vector<int>& nums) {
        //将每个数字的每一个比特位相加，加起来/3==1的位肯定为1  ==0的位为单独数字的0
        int ret = 0;
        for(int j=0;j<=31;j++)
        {   
            int cout=0;     
            for(int i=0;i<nums.size();i++)
            {
               cout += (nums[i]>>j)&1;
            }
            if(cout%3!=0)
            {
                ret|=(1<<j);
            }
        }
        return ret;
    }
};

